Skip to content

Blog about better using AI Infrastructure via MIG - #252

Merged
saiyam1814 merged 18 commits into
mainfrom
utho-mig-blog
Jul 20, 2026
Merged

Blog about better using AI Infrastructure via MIG#252
saiyam1814 merged 18 commits into
mainfrom
utho-mig-blog

Conversation

@shkatara

Copy link
Copy Markdown
Collaborator

No description provided.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 15, 2026

Copy link
Copy Markdown

Deploying website with  Cloudflare Pages  Cloudflare Pages

Latest commit: 737508d
Status: ✅  Deploy successful!
Preview URL: https://9ddee9e4.website-dab.pages.dev
Branch Preview URL: https://utho-mig-blog.website-dab.pages.dev

View logs

shkatara and others added 3 commits July 15, 2026 14:08
…grams

- Open with the GPU sharing problem and the time-slicing / MPS / MIG
  spectrum so MIG has a story, not just a definition
- Add complete step-by-step nvidia-smi walkthrough for one GPU: check,
  enable, list profiles/placements, carve (incl. mixed geometry),
  verify, run on a slice, destroy CIs/GIs, disable MIG
- Add the all-8-GPUs variant of every command plus fleet-wide teardown
- Add GPU Operator install command and mig.strategy single/mixed
  explanation, plus declarative disable via all-disabled label
- Replace dark AI-generated infographics with light Excalidraw-style
  diagrams (cover, sharing spectrum, GI/CI, k8s GPU stack, runtime flow)
- Regenerate feeds

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@saiyam1814

Copy link
Copy Markdown
Member

Pushed a rework of the post directly to this branch (great groundwork @shkatara, the real captured outputs and pitfalls carried straight over).

What changed:

  1. Story first: the post now opens with the GPU sharing problem and walks the time-slicing → MPS → MIG spectrum, so MIG arrives as the answer to "how do you share without losing isolation" instead of being introduced cold.
  2. Full command lifecycle: new Hands-On Part 1 takes a single GPU through check → enable → -lgip/-lgipp → carve (incl. mixed 2g.48gb + 2x 1g.24gb geometry) → verify (-lgi, -lci) → run on a slice via CUDA_VISIBLE_DEVICES → destroy CIs → destroy GIs → disable MIG. Part 2 scales the same commands to all 8 GPUs (drop -i) plus fleet-wide teardown.
  3. Operator gaps filled: added the actual helm install for the GPU Operator, the mig.strategy single vs mixed explanation (the workload manifest uses the mixed resource name), and the declarative disable path via all-disabled.
  4. Diagrams replaced with light Excalidraw-style ones: cover, sharing spectrum, GI/CI land-and-building, k8s GPU stack, runtime flow. The Grafana screenshot stays as-is.

⚠️ Please verify on the box: outputs you originally captured are untouched, but the new ones (the -lgip profile table, -lgipp placements, enable/disable messages, -cgi/-dci/-dgi outputs, PCIe bus IDs, and the CUDA_VISIBLE_DEVICES smoke test) are reconstructed from the NVIDIA MIG user guide and verified RTX PRO 6000 captures, not from this host. A quick re-run of Part 1 / Part 2 to paste real outputs would make it bulletproof.

saiyam1814 and others added 2 commits July 17, 2026 23:02
Ran the full MIG lifecycle on the 8x RTX PRO 6000 node (103.209.144.201):
- Real -lgip table (full profile list incl. +gfx/+me.all, 95.12 GiB for 4g.96gb)
- Real -lgipp placements: 12-unit grid, {0,3,6,9}:3 for 1g.24gb; rewrote
  the placement explanation accordingly
- Real -lgi/-lci (placements 0:3/3:3/6:3/9:3), mixed-geometry capture
  (2g.48gb at 0:6 + two 1g.24gb), dgi-before-dci failure message
- Real enable/disable outputs incl. persistence-mode warnings, all-8 bus IDs
- Real CUDA smoke test on a slice UUID (torch cu130, 24192 MiB visible)
- Fix prereqs: 256 cores
- Mark post as draft until final review; feeds regenerated (drafts excluded)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@saiyam1814

Copy link
Copy Markdown
Member

Update: all command outputs are now real captures from the box (ran the full lifecycle on the 8x RTX PRO 6000 node today, with Saiyam's approval for briefly pausing the HAMi demo pods).

What the live run corrected vs the reconstructed draft:

  • Placements: the card uses a 12-unit grid — 1g.24gb is {0,3,6,9}:3, 2g.48gb is {0,6}:6, 4g.96gb is {0}:12. The placement explanation was rewritten around this.
  • Full -lgip table including +gfx and +me.all variants, and 4g.96gb is 95.12 GiB (not 95.00).
  • Real mixed-geometry capture (2g.48gb + 2x 1g.24gb, GI IDs 1/5/6), real dgi-before-dci failure message, real enable/disable outputs with the persistence-mode warnings, and a real CUDA smoke test pinned to a slice UUID (24192 MiB visible).
  • Prereqs fixed: the node has 256 cores.
  • The MIG UUIDs from the fresh run are identical to the original capture (they're deterministic per GPU+GI), so everything is consistent end to end.

The post is marked draft: true until final review — flip it to false (or delete the line) and regenerate feeds when ready to publish. Note the box currently runs HAMi rather than the GPU Operator, so the operator sections remain from the original captured run; the box was restored to exactly its prior state (MIG disabled everywhere, HAMi demo pods back up).

saiyam1814 and others added 12 commits July 19, 2026 22:32
- New baseline subsection: what a CUDA context is, how kernels land on
  SMs, and the one-context-at-a-time rule that makes GPUs single-tenant
- Time-slicing reframed as contexts taking turns, with concrete OOM and
  noisy-neighbor examples
- MPS reframed around its actual trick: merging all clients into the
  MPS server's single context for real space-sharing, incl. the opt-in
  limit env vars and the shared-fault-domain failure story
- MIG subsection extended with L2/bandwidth partitioning and per-slice
  contexts; comparison table gains "the trick" and parallelism rows
- Spectrum diagram corrected: time-slicing shows separate contexts
  taking turns, MPS shows the merged context

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- GPU context switches spill per-SM register files and shared memory to
  VRAM, orders of magnitude heavier than a CPU thread switch
- Pre-Pascal kernels were uninterruptible (kernel-boundary switching
  only); Pascal added instruction-level compute preemption, which k8s
  time-slicing relies on today
- Short kernels still interleave at kernel boundaries; preemption is
  the expensive escape hatch for long kernels
- Add training vs inference sharing intuition

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uance

Cross-checked against the GPU-Enabled Platforms on Kubernetes book:
- Time-slicing: add the no-fairness-guarantee point (no fixed quantum,
  no priorities; honest name is GPU oversubscription)
- Memory: every context sees the full VRAM as allocatable and nothing
  tracks intended shares
- MPS: Volta+ clients keep separate GPU address spaces; shared fate is
  the scheduler and the server, not raw memory access

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- frontmatter `authors:` array (first entry primary), legacy `author:`
  still works everywhere
- post page renders all authors: stacked byline avatars, joined names,
  one bio card each, metadata + OG + JSON-LD author arrays
- author pages and counts include co-authored posts
- blog cards show all author names and avatars

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Technical review fixes:
- 1g.24gb slice is 46 SMs, not "roughly 47" (matches the real -lgip
  table; driver reserves a few, 4x46=184 of 188)
- media-engine profiles: plain slices already carry a proportional
  NVDEC/NVENC; -me strips them, +me.all hoards all, +gfx adds graphics

Utho sponsor feature (frontmatter-driven, only shows when `sponsor:` set):
- SponsorCallout component: slim "Hardware partner" strip near the top,
  thank-you CTA card at the end; rel="sponsored" links
- credit Utho on this post (URL is a placeholder pending the UTM link)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- set sponsor.url to the Kubesimplify UTM link
- SponsorCallout CTA shows the Utho logo (light/dark swap via .dark),
  falling back to the text name when no logo is set
- placeholder wordmark SVGs at public/img/sponsors/utho-{dark,light}.svg
  to be replaced with the official assets (same filenames)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- add utho-logo-light.png (navy, light theme) + utho-logo-dark.png
  (white, dark theme), resized to 600px wide, transparency preserved
- point frontmatter at the real assets; drop placeholder wordmark SVGs

Note: Utho names by theme (dark = white ink for dark bg), so mapping
was verified by pixel color, not filename.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the slim top strip with the same logo CTA card used at the end,
so the sponsor is credited identically above and below the article.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@saiyam1814
saiyam1814 merged commit a38b25e into main Jul 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants